맨위로가기

프로퍼티 리스트

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

프로퍼티 리스트(Property List, plist)는 다양한 방식으로 구현될 수 있는 데이터 표현 방식이다. NeXTSTEP에서 처음 사용되었으며, GNUstep과 macOS 프레임워크에서도 여러 형식이 도입되었다. 주로 환경 설정, 객체 저장 등에 사용되며, 텍스트(ASCII, XML), 이진 파일 등 여러 파일 형식을 지원한다. macOS에서는 plutil 유틸리티를 통해 구문 검사, 형식 변환, 편집이 가능하며, AppleScript 인터페이스를 통해 접근할 수도 있다. Windows, 크로스 플랫폼 환경에서도 plist 파일을 활용할 수 있으며, 다양한 프로그래밍 언어에서 plist 파일을 읽고 쓰는 기능을 제공한다.

더 읽어볼만한 페이지

  • GNUstep - 오브젝티브-C
    오브젝티브-C는 C 언어를 기반으로 스몰토크의 객체 지향 기능을 결합하여 개발된 프로그래밍 언어이며, 애플의 macOS와 iOS 개발 환경에서 핵심 언어로 사용되었다.
  • GNUstep - 번들 (macOS)
    macOS에서 번들은 응용 프로그램, 프레임워크, 플러그인 등 다양한 형태로 존재하며 실행에 필요한 코드, 리소스, 설정 파일 등을 포함하는 특수한 디렉터리 형식이다.
  • NeXT - 스티브 잡스
    스티브 잡스는 애플의 공동 창업자이자 CEO, 픽사의 CEO, 디즈니의 이사회 멤버로서, 혁신적인 기술과 디자인으로 정보기술 산업에 큰 영향을 미친 미국의 기업인이다.
  • NeXT - NeXTSTEP
    NeXTSTEP은 NeXT에서 개발한 마하 커널 기반의 유닉스 계열 운영 체제로, BSD 소스 코드를 포함하며 디스플레이 포스트스크립트, 독점적인 창 관리 엔진, Objective-C 언어 및 런타임 환경을 제공하고 현대적인 운영체제 인터페이스 발전에 기여하여 macOS의 기반이 되었으며 최초의 웹 브라우저와 앱 스토어 개발에 영향을 미쳤다.
  • 데이터 직렬화 포맷 - XML
    XML은 태그 중첩 방식 구문을 사용하는 범용 언어로서, 인터넷을 통한 구조화된 문서 및 데이터 공유를 용이하게 하고, 웰 폼 및 유효 XML 문서 개념을 통해 구문 정확성을 검사하며, 데이터 교환 등 다양한 분야에서 널리 사용된다.
  • 데이터 직렬화 포맷 - S-표현식
    S-표현식은 Lisp 구문에서 소스 코드와 데이터를 표현하는 기본 구조로, 원자와 `(x . y)` 형태의 표현식으로 정의되며, 이진 트리 표현, 다양한 데이터 형식 지원, 그리고 여러 분야에서 활용된다.
프로퍼티 리스트 - [IT 관련 정보]에 관한 문서
개요
종류파일 포맷
확장자.plist
MIME 형식application/x-plist
개발애플 컴퓨터, 그누스텝, 과거 NeXT
종류연관 배열 객체 직렬화

2. 표현 방법

프로퍼티 리스트는 데이터를 추상적으로 표현하며, 구체적인 파일 형식은 여러 방식으로 구현될 수 있다. NeXTSTEP에서는 한 가지 형식을 사용했는데, GNUstep과 OS X 프레임워크에서는 다양한 형식을 도입했다.[29]

2. 1. NeXTSTEP

NeXTSTEP에서 프로퍼티 리스트는 사람이 읽고 수정하기 쉽도록 프로그래밍 언어 문법과 유사한 ASCII 형식으로 설계되었다.

문자열은 다음과 같이 표현한다.

"plist 문자열"

바이너리 데이터는 다음과 같이 표현한다.

< ''[ASCII HEX 코드]'' >

배열(Array)는 다음과 같이 표현한다.

( "1", "2", "3" )

딕셔너리(Dictionary) 배열은 다음과 같이 표현한다.

{

"key" = "value";

...

}

NeXTSTEP의 프로퍼티 리스트는 NSValue(숫자, 불린 자료형 등) 객체 표현에 제한이 있었다.[29]

2. 2. GNUstep

GNUstep은 NeXTSTEP 형식을 기반으로 몇 가지 추가적인 데이터 형식을 지원한다.

GNUstep의 프로퍼티 리스트는 macOS에서 읽고 쓸 수 있다. 또한, GNUstep은 자체 바이너리 형식인 NSPropertyListGNUstepBinaryFormat영어을 지원한다.[5]

GNUstep은 plist 명령줄 도구를 제공하며, 여기에는 pl[7] 및 defaults[8] 버전이 포함된다.

2. 3. macOS

macOS는 NeXTSTEP 형식을 읽을 수 있지만, 애플은 XML 기반 형식과 바이너리 형식, 이렇게 두 가지 새로운 형식을 선호한다.

Mac OS X 10.0에서는 NeXTSTEP 형식이 폐지되었고, 애플에서 공개한 DTD를 갖는 새로운 XML 형식이 도입되었다. XML 형식은 비ASCII 문자를 지원하며, GNUstep의 ASCII 프로퍼티 리스트 형식과 달리, Apple의 ASCII 프로퍼티 리스트 형식이 지원하지 않는 NSValue 객체를 저장할 수 있다.[9]

하지만 XML 파일은 공간 효율적인 저장 방식이 아니기 때문에, Mac OS X v10.2에서는 프로퍼티 리스트 파일을 바이너리 파일로 저장하는 새로운 형식이 도입되었다. Mac OS X v10.4부터는 환경설정 파일의 기본 형식이 되었다.

XML 프로퍼티 리스트에 사용되는 Foundation 클래스와, CoreFoundation 형식, XML 태그 및 데이터 저장 형식은 다음과 같다.

Foundation 클래스CoreFoundation 형식XML 태그형식
NSStringCFString<string>UTF-8 인코딩 문자열
NSNumberCFNumber<real>, <integer>10 진수 문자열
NSNumberCFBoolean<true /> 또는 <false />두 종류의 태그
NSDateCFDate<date>ISO 8601 형식 문자열
NSDataCFData<data>Base64 인코딩 데이터
NSArrayCFArray<array>child element 번호
NSDictionaryCFDictionary<dict><key> 태그와 plist element 관련 태그



프로퍼티 리스트는 plutil 유틸리티를 사용하여 구문 확인, 형식 변환에 사용할 수 있다. 또한, NeXTSTEP의 기본 유틸리티를 사용하여 환경설정 값을 저장하고 관리할 수 있다.

2. 3. 1. macOS에서의 도구

`plutil` 유틸리티(Mac OS X 10.2에서 도입)는 프로퍼티 리스트의 구문을 확인하거나 프로퍼티 리스트 파일을 다른 형식(XML, 바이너리, JSON)으로 변환하는 데 사용할 수 있다.[11]

`defaults` 명령어는 커맨드 라인에서 환경설정 값을 읽고 쓰는 데 사용된다.[10]

`/usr/libexec/PlistBuddy` 명령어는 대화형 프로퍼티 리스트 편집기를 제공하며, 스크립트 작성도 가능하다.[10]

Xcode는 내장된 프로퍼티 리스트 편집기를 통해 바이너리 및 XML 형식의 프로퍼티 리스트를 시각적으로 편집할 수 있게 해준다.

Mac OS X 10.4부터는 시스템 이벤트 응용 프로그램을 통해 프로퍼티 리스트 파일을 읽기 위한 AppleScript 인터페이스를 제공한다. Mac OS X 10.5에서는 프로퍼티 리스트의 생성, 작성, 편집을 위한 AppleScript 인터페이스를 제공한다.

3. 다른 플랫폼

XMLJSON 프로퍼티 리스트는 모든 텍스트 편집기에서 수동으로 편집할 수 있다. 애플은 이진 또는 XML 형식의 plist는 Xcode에서 계층적 뷰어/편집기로 편집할 수 있도록 지원하지만, JSON 형식은 처리할 수 없다. Mac OS X 10.4부터 System Events 응용 프로그램을 통해 프로퍼티 리스트 파일을 읽을 수 있는 AppleScript 인터페이스를 제공하며, Mac OS X 10.5부터는 파일을 편집, 생성 및 쓸 수 있는 인터페이스도 제공한다.[13]

XML 형식의 태그, 관련 Foundation 클래스 및 CoreFoundation 유형, 데이터 저장 형식은 다음과 같다.

Foundation 클래스CoreFoundation 유형XML 태그저장 형식
UTF-8 인코딩 문자열
십진수 문자열; 실수는 지수를 가질 수 있으며, 무한대(inf) 또는 NaN(nan)일 수 있다.
데이터 없음 (태그만)
ISO 8601 형식 문자열
Base64 인코딩된 데이터
자식 요소의 수에 제한이 없습니다. 비어 있을 수 있다.
태그와 plist 요소 태그가 번갈아 나타납니다. 비어 있을 수 있다.



이진 파일 형식은 애플의 Foundation 라이브러리에서 이진 plist의 오픈 소스 구현에 대한 Core Foundation C 코드 소스 파일()의 주석 블록에 문서화되어 있다.[15] 애플은 plist(5) 매뉴얼 페이지 문서에서 구현을 불투명하다고 설명하며, 이는 해당 형식에 의존하는 것을 권장하지 않음을 의미한다.[14]

이진 파일은 XML이나 JSON 형식으로는 캡처할 수 없는 정보를 저장할 수 있다. 예를 들어, 이진 plist는 별도의 배열과 사전이 파일에 직렬화되어 모두 동일한 데이터 요소를 저장하고 있다는 사실을 캡처할 수 있지만, XML 파일에서는 불가능하다. 또한, 이진 파일에는 직렬화될 때 데이터 항목을 식별하는 데 사용되는 UID 유형이 있다.

이진 plist 객체 형식 (CoreFoundation 1153 기준)은 다음과 같다.[15]

이진 plist 객체 형식 (CoreFoundation 1153 기준)
Foundation 클래스CoreFoundation 유형객체 유형마커 바이트인코딩된 데이터
(v"1?"+)
(v"1?"+)style="min-width:10em" |string: 재귀 인코딩의 URL 문자열(예: "string 객체 형식"?); base string: 동일하지만 기본 URL이 먼저 인코딩됩니다.
(v"1?"+)16 바이트의 UUID
없음 - 그냥 패딩
바이트 수는 이며, 빅 엔디안 바이트(1, 2, 4 또는 8)입니다.
바이트 수는 이며, 빅 엔디안 바이트(4 또는 8)입니다.
8 바이트 float가 따르며, 빅 엔디안 바이트; 2001년 1월 1일(Core Data 에포크)부터의 초
nnnn은 바이트 수이며, 1111이 아니면 int 수가 따르고 바이트가 따릅니다.
ASCII 문자열, nnnn은 문자 수이고, 그렇지 않으면 1111이면 int 수가 따르고 바이트가 따릅니다.
유니코드 문자열, nnnn은 문자 수이고, 그렇지 않으면 1111이면 int 수가 따르고 빅 엔디안 2바이트 uint16_t가 따릅니다.
(v"1?"+)UTF-8 문자열, nnnn은 문자 수이고, 그렇지 않으면 1111이면 int 수가 따르고 바이트가 따릅니다.
nnnn+1은 빅 엔디안 바이트 수(1, 2, 4 또는 8)입니다. 부호 없는 정수이며, 에서만 생성됩니다(아래 참조).[16]
objref* nnnn은 수이며, 1111이 아니면 int 수가 따릅니다.
(v"1?"+)objref* nnnn은 수이며, 1111이 아니면 int 수가 따릅니다.
(v"1?"+)objref* nnnn은 수이며, 1111이 아니면 int 수가 따릅니다.
keyref* objref* nnnn은 수이며, 1111이 아니면 int 수가 따릅니다.



객체 테이블 다음에는 두 테이블의 크기와 위치에 대한 정보를 포함하는 트레일러가 뒤따른다.

2006년에 도입되어 NetBSD#4.0 (2007)에서 처음 출시된 proplib 라이브러리는 커널과 유저랜드 간의 데이터 직렬화에 사용될 수 있다. 이 라이브러리는 XML plist 언어의 일부를 구현한다.[23] 2010년에는 NetBSD의 proplib 라이브러리가 DragonFly로 포팅되었으며, DragonFly BSD#2.8부터 사용할 수 있다.[24]

3. 1. Windows

plist 파일은 iOS 및 macOS를 포함하여 애플 또는 Darwin 시스템에서 가장 잘 알려져 있지만, iTunes[20] 또는 Safari[21]와 같은 애플 소프트웨어가 설치된 경우 Windows 컴퓨터에도 존재한다. Windows에서 해당 파일은 일반적으로 바이너리 파일이지만,[22] 일부 응용 프로그램은 다른 형식으로 PLIST 파일을 생성할 수 있다.

Windows에서 애플 plist 파일은 사용자 홈 디렉터리에 저장된다. Windows의 이러한 plist 파일은 일반적으로 윈도우 레지스트리를 사용하는 대신 환경 설정 및 기타 정보를 저장한다.

Windows에서 PLIST 파일을 편집하는 옵션은 macOS만큼 광범위하지 않다. 파일이 XML 또는 JSON 형식인 경우 Notepad++과 같은 텍스트 편집기를 주의해서 사용할 수 있다. 애플은 "Apple Application Support" 패키지 (iTunes의 일부) 내에 plutil.exe를 제공하며, 이는 macOS의 해당 프로그램과 동일하다.

3. 2. 크로스 플랫폼


  • NetBSD#4.0(2007)에서 처음 출시된 proplib 라이브러리는 2006년에 도입되었으며, 커널과 유저랜드 간의 데이터 직렬화에 사용될 수 있다. 이 라이브러리는 XML plist 언어의 일부를 구현한다.[23] 2010년에는 NetBSD의 proplib 라이브러리가 DragonFly로 포팅되었으며, DragonFly BSD#2.8부터 사용할 수 있다.[24]
  • 페이스북의 오픈 소스 형태의 Xcode 빌드 도구 재구현인 xcbuild는 plist 라이브러리를 포함하고 있다. 이러한 크로스 플랫폼 유틸리티는 C++(C++)로 작성되었다.[25]
  • 파이썬 프로그래밍 언어는 plist 파일을 읽고 쓰기 위한 내장 plistlib 모듈을 가지고 있으며, Apple의 XML 또는 바이너리 형식(Python 3.4 이후)을 지원한다.[26] ProperTree는 이 라이브러리를 사용하는 크로스 플랫폼 편집기이다.[27] ccl-bplist라는 타사 라이브러리는 NSKeyedArchiver UID를 처리하는 추가 기능을 가지고 있다.[28]
  • Go는 네 가지 유형의 plist를 지원하는 plist 패키지를 가지고 있다: OpenStep 텍스트, GNUStep 텍스트, Apple XML 및 Apple 바이너리. 또한 XML 및 바이너리 형식의 UID를 처리한다.[29]
  • Dart는 propertylistserialization[30]이라는 타사 라이브러리를 가지고 있으며, NSKeyedArchiver UID도 처리한다.

4. 예제

xml



냉장고



코끼리





```

Dictionary 안에 '냉장고' 키를 가진 element의 0번 인덱스에 '코끼리' 문자열 element를 가진 array를 표현하는 방법이다. (Mac OS X 10.6 작성)

4. 0. 1. 냉장고 안에 코끼리 넣기 (Mac OS X 10.6 작성)

xml



냉장고



코끼리





```

Dictionary 안에 '냉장고' 키를 가진 element의 0번 인덱스에 '코끼리' 문자열 element를 가진 array를 표현하는 방법이다.

참조

[1] 웹사이트 NSString class reference: propertyListFromStringsFileFormat http://www.gnustep.o[...] 2020-02-17
[2] 웹사이트 Old-Style ASCII Property Lists https://developer.ap[...] 2020-02-16
[3] 웹사이트 NSPropertyListSerialization class documentation http://www.gnustep.o[...] 2004
[4] 웹사이트 Property Lists http://wiki.gnustep.[...]
[5] 웹사이트 NSSerialization documentation http://www.gnustep.o[...]
[6] 웹사이트 Types and Constants: NSPropertyListFormat http://gnustep.org/r[...]
[7] Man pldes ManKier
[8] Man defaults ManKier
[9] 웹사이트 appleexaminer.com: "PLIST files" http://www.appleexam[...] 2014-02-27
[10] Man PlistBuddy Darwin
[11] Man plutil Darwin
[12] Man pl Darwin
[13] 웹사이트 AppleScript: Property Lists http://www.apple.com[...] 2009-04-24
[14] Man plist Darwin
[15] 웹사이트 CF/CFBinaryPList.c https://opensource.a[...] 2020-01-06
[16] 웹사이트 Geek post: NSKeyedArchiver files – what are they, and how can I use them? https://digitalinves[...] 2012-04-04
[17] 웹사이트 NSCoder.html http://www.gnustep.o[...]
[18] 웹사이트 apple/swift-corelibs-foundation: NSKeyedArchiver.swift https://github.com/a[...] 2021-12-14
[19] 웹사이트 NSKeyedArchiver documentation http://www.gnustep.o[...] 2020-02-23
[20] 간행물 Property Lists https://doi.org/10.1[...] Springer International Publishing 2024-03-12
[21] 웹사이트 How does the Apple Safari web-browser store its settings on Windows? https://superuser.co[...]
[22] 웹사이트 GitHub - microsoft/NSPlist: NSPlist https://github.com/m[...] 2019-05-03
[23] 웹사이트 proplib — property container object library http://bxr.su/n/comm[...] NetBSD
[24] 서적 DragonFly On-Line Manual Pages http://mdoc.su/d/pro[...] DragonFly BSD
[25] 웹사이트 facebook/xcbuild/Libraries/plist https://github.com/f[...] 2020-02-17
[26] 웹사이트 plistlib — Generate and parse Mac OS X .plist files https://docs.python.[...] 2020-01-06
[27] 웹사이트 corpnewt/ProperTree: Cross platform GUI plist editor written in python https://github.com/c[...] 2020-02-17
[28] 웹사이트 cclgroupltd/ccl-bplist https://github.com/c[...] 2020-01-15
[29] 웹사이트 Package plist https://godoc.org/gi[...]
[30] 웹사이트 propertylistserialization {{!}} Dart package https://pub.dev/pack[...] 2024-09-14
[31] 문서 http://manpages.ubun[...]
[32] 문서 https://www.apple.co[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com